#ifndef _MESH_HPP
#define _MESH_HPP

geometry: a dict of primitive modes mapped to index lists
e.g., geometry={GL_POINTS:[],GL_LINE_STRIP:[], \
				GL_LINE_LOOP:[],GL_LINES:[], \
				GL_TRIANGLE_STRIP:[], \
				GL_TRIANGLE_FAN:[],GL_TRIANGLES:[], \
				GL_QUAD_STRIP:[],GL_QUADS:[], \
				GL_POLYGON:[]}

// Note: These conveniently match the GL_ equivalents
enum Geometry {
	GM_POINTS         = 0x0000,
	GM_LINES          = 0x0001,
	GM_LINE_LOOP      = 0x0002,
	GM_LINE_STRIP     = 0x0003,
	GM_TRIANGLES      = 0x0004,
	GM_TRIANGLE_STRIP = 0x0005,
	GM_TRIANGLE_FAN   = 0x0006,
	GM_QUADS          = 0x0007,
	GM_QUAD_STRIP     = 0x0008,
	GM_POLYGON        = 0x0009,
	GM_COUNT
};

typedef std::vector<size_t> IdxCollection;

typedef RGBAColor Color;

class Vertex
{
	Vector m_pos;
	Vector m_texcoords;
	Color  m_color;
public:
	
};

VertexCompiler
{
public:
	
	char* compile();
};

typedef std::vector<Vertex> VertexCollection;

class Mesh
{
	IdxCollection m_geometry[GM_COUNT];
public:
	
};

#endif //_MESH_HPP
